<?php 


/**
 * Convertit une chaine en facture au format XML
 * @param string $str
 * @param string $filename Si null, Y-m-d.xml
 * @return array Erreurs
 */
function txtToXml($str, $filename = null)
{
    // Quelques vérifications de bases
    $errors = array();
    
    $lines = explode("\n",$str);
    
    $length = count($lines);
    
    if(0 == $length || 3 > count($lines) || 'start' != strtolower(trim($lines[0])) || 'end' != strtolower(trim($lines[$length-1])))
        $errors[] = "La facture doit commencer par START et finir par END.";
    

    if(1 <= count($errors) )
        return $errors;

    // Liste des infos dispo pour chaque bloc
     $blocs = array(
            "dest"	=> array( "nom","prenom","adresse","cp","ville", "pays", "tel"),
            "exp"	=> array( "nom","prenom","adresse","cp","ville", "pays", "tel"),
            "dat"	=> array("dateFacturation", "dateLivraison"),
            "art"	=> array("code", "libelle", "quantite"),
            "cond"	=> array("nom"),
            "pai"	=> array("mode", "montant")
    );

    $xmlstr = "<?xml version='1.0' encoding='ISO-8859-1' standalone='no' ?>";
    $xmlstr .= '<p:facture xmlns:p="http://ppa.org" xsi:schemaLocation="http://ppa.org ../schemaFacture.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">';

    // On parcourt les infos de la facture	
    for($i = 1; $i < $length-1; $i++)
    {
            $line = trim($lines[$i]);

            // On sépare le libellé des infos
            $tmp = explode('+', $line);

            // On vérifie qu'il y a bien un label et des infos
            if(2 > count($tmp))
                    continue;

            $label = $tmp[0];

            $infos = explode(":", $tmp[1]);

            $bloc = $blocs[strtolower($label)];

            $xmlstr.= "<p:".$label.">";

            $y = 0;

            foreach($infos as $info)
            {
                    $labelInfo = $bloc[$y];

                    $xmlstr .= "<p:".$labelInfo.">".$info."</p:".$labelInfo.">";

                    $y++;
            }

            $xmlstr .= "</p:".$label.">";
    }
    
    $xmlstr .= "</p:facture>";
    
    // On créee le XML de la facture
    $bill = $schema = new DOMDocument();
    $bill->loadXml($xmlstr);
    
    // On charge le schéma de validation
    $schema = new DOMDocument();
    $schema->load("schemaFacture.xsd");
    
    // On valide la facture avec le schéma
    $isXmlValid = @$bill->schemaValidateSource( $schema->saveXML());
     
    if($isXmlValid)
    {
        if(empty($filename))
            $filename = date("Y-m-d");
        // Si la facture est valide on peut sauvegarder le xml

        $bill->save("bills/".$filename.".xml");
    }
    else
        $errors[] = "Le fichier n'est pas correctement formaté. Reportez vous à la documentation pour plus d'informations.";
    
    return $errors;
}

/**
 * SUppression d'une facture
 * @param string $filename
 */
function deleteBill($filename)
{
    if(file_exists("bills/".$filename)) unlink("bills/".$filename);
}

?>

